// 函数参数必须一一对应，多一个少一个都会报错
function buildName1(firstName: string, lastName: string) {
  return firstName + ' ' + lastName
}
let name1 = buildName1('苏', '烈')
console.log(name1); // '苏 烈'

// 可选参数: 如果想灵活传参，可以使用可选参数，用？表示
function buildPerson1(name: string, age?: number) {
  return {name, age}
}
let info1 = buildPerson1('花木兰')
console.log(info1); // {name: "花木兰", age: undefined}
let info2 = buildPerson1('花木兰', 19)
console.log(info2); // {name: "花木兰", age: 19}

// 默认参数，默认参数不必放在最后面，可以在任何位置，不想要使用默认参数可以用undefined或者null占位
function buildName2(firstName = '尼古拉斯',lastName: string) {
  return firstName + '·' + lastName
}
let name2 = buildName2(undefined, '凯')
console.log(name2); // '尼古拉斯·凯'
function buildPerson2(name: string, age = {a: 23, b: 16}) {
  return { name, age: age.b }
}
let info3 = buildPerson2('百里守约', { a: 12, b: 19})
console.log(info3); // {name: "百里守约", age: 19}

// 剩余参数
function buildName3(firstName: string, ...names: string[]) {
  return firstName + ' ' + names.join(' ')
}
let name3 = buildName3('百里玄策', '王昭君', '貂蝉')
console.log(name3); // 百里玄策,王昭君,貂蝉
